2011/03/19

Recent entries from same category

  1. RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」
  2. コメントも扱える高機能な C++ 向け JSON パーサ「jsoncpp」
  3. C++ で flask ライクなウェブサーバ「clask」書いた。
  4. C++ 用 SQLite3 ORM 「sqlite_orm」が便利。
  5. zsh で PATH に相対パスを含んだ場合にコマンドが補完できないのは意図的かどうか。

以前、kazuhoさんが書いたpicojsonの紹介をさせて頂いたのですが、あれから何度も使わせて頂いていてkazuhoさんのいる方角には足を向けて寝られないmattnです。
Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!

kazuhoさんがやってくれました。ずいぶん前からjsonをC++でパース(SAXじゃなくてDOM)するのに小さいライブラリないかなーと思ってました。個人的にはjson-cというのを使ってたのですが...

http://mattn.kaoriya.net/software/lang/c/20090702153947.htm
なんど見ても綺麗なコードです。
で、先日ちょっと出張があって新幹線に乗る事があり、ちょっとルールを決めて僕にも同じ物が書けるか試してみました。
以下ルール。
  • picojson相当のjsonパーサをC++で書く
  • インターネット等の外部リソースは見てはいけない(picojsonも見ちゃダメ)
  • 見て良いのは/usr/include以下だけ
  • 制限時間は新幹線に乗っていられる間だけ
このルールで新幹線に乗った途端、ノートPCを開いて書き始めました。いろいろ書いては直してを繰り返し、出来上がった物を公開しておきます。おそらく、picojsonと同じ様な動きをします。
但し、後からpicojsonを見て気づいたのですが、"\uXXXX"といった文字列表記に対応出来ていません。まぁもう外部リソースを見てしまったので、これから対応するつもりはありません。
一応、マルチブートのノートPCだったのでWindowsでもコンパイル出来る様にしてあります。
あと、オブジェクトのリテラルで最後がカンマで終わる様なフォーマットも#define宣言でパース出来る様にしました。さらに関数テンプレートが使えないVC6でもビルド出来る様になっています。(使い方が若干異なりますが)

picojsonと同じようにヘッダファイルだけで使えます。ただしkazuhoさん程のC++erでは無いので抜けがあるかもしれませんが...苦笑。

githubに適当にアップしておきました。
mattn/minijson - GitHub

simple C++ json library. (clone of kazuho/picojson)

https://github.com/mattn/minijson
ネタですが、よろしければ話題のネタ程度にどうぞ。
Posted at by